#ifndef __QYQ_MODULE_BUZZER_H_
#define __QYQ_MODULE_BUZZER_H_
#include "chip_include.h"
#ifndef __QYQ_MODULE_BUZZER_C_
#define QYQ_MODULE_BUZZER_EXT extern
#else
#define QYQ_MODULE_BUZZER_EXT
#endif

typedef struct
{
    uint8_t qyq_module_buzzer_status;     // BUZZER 的状态 0 关闭  1 打开
    uint32_t qyq_module_buzzer_frequency; // BUZZER 的频率调节
    uint8_t qyq_module_buzzer_duty;       // BUZZER 的占空比调节

    void (*qyq_module_buzzer_write_status)(uint8_t status);        // 需要适配，BUZZER 写状态
    void (*qyq_module_buzzer_write_frequency)(uint32_t frequency); // 需要适配，BUZZER 写频率
    void (*qyq_module_buzzer_write_duty)(uint8_t duty);            // 需要适配，BUZZER 写占空比

} qyq_module_buzzer_config_t;

// 功能
typedef struct qyq_module_buzzer_type
{
    qyq_module_buzzer_config_t *qyq_module_buzzer_config;

    int8_t (*qyq_module_buzzer_init)(struct qyq_module_buzzer_type *this);                               // BUZZER状态初始化
    int8_t (*qyq_module_buzzer_on)(struct qyq_module_buzzer_type *this);                                 // 打开BUZZER灯
    int8_t (*qyq_module_buzzer_off)(struct qyq_module_buzzer_type *this);                                // 关闭BUZZER灯
    int8_t (*qyq_module_buzzer_get_status)(struct qyq_module_buzzer_type *this, uint8_t *status);        // 获取状态
    int8_t (*qyq_module_buzzer_set_status)(struct qyq_module_buzzer_type *this, uint8_t status);         // 设置状态
    int8_t (*qyq_module_buzzer_get_frequency)(struct qyq_module_buzzer_type *this, uint32_t *frequency); // 获取频率
    int8_t (*qyq_module_buzzer_set_frequency)(struct qyq_module_buzzer_type *this, uint32_t frequency);  // 设置频率
    int8_t (*qyq_module_buzzer_get_duty)(struct qyq_module_buzzer_type *this, int8_t *duty);             // 获取占空比
    int8_t (*qyq_module_buzzer_set_duty)(struct qyq_module_buzzer_type *this, int8_t duty);              // 设置占空比
} qyq_module_buzzer_type_t;

QYQ_MODULE_BUZZER_EXT int8_t qyq_module_buzzer_create(qyq_module_buzzer_type_t *this, qyq_module_buzzer_config_t *qyq_module_buzzer_config);

#endif
